﻿// 4934. 邀请朋友.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <cstring>


using namespace std;
/*
https://www.acwing.com/problem/content/4937/


你想邀请朋友来参加生日派对，但是你需要为每个到场的朋友准备一份食物。

每份食物需要用到 n种食材。

你既可以使用厨房中现有的食材，也可以去超市购买新的食材。

每种食材在超市有两种包装：小包装和大包装。

我们用 6 个整数 x,y,s1,p1,s2,p2来描述每一种食材，
 其中 x是每份食物需要用到的（这种食材的）量，
 y是厨房目前可用的（这种食材的）量，
 s1和 p1是（这种食材的）小包装的净含量和价格，
 s2 和 p2是（这种食材的）大包装的净含量和价格。

举办这次派对，你可以花费的最大金额为 m。

请你计算，最多可以邀请多少个朋友（即最多可以准备多少份食物）。

注意，每种包装的食材都不拆开售卖。

输入格式
输入包含多组测试数据。

每组数据第一行包含两个整数 n,m。

接下来 n行，每行包含 6个整数 x,y,s1,p1,s2,p2。

当输入一行为 0 0 时，表示输入结束。

输出格式
每组数据输出一行结果，一个整数，表示可以邀请的最大朋友数量。

数据范围
输入最多包含 10组数据。
1≤n≤100
,
1≤m≤105
,
10≤x≤100
,
1≤y≤100
,
1≤s1<s2≤100
,
10≤p1<p2≤100
,

输入样例：
2 100
10 8 10 10 13 11
12 20 6 10 17 24
3 65
10 5 7 10 13 14
10 5 8 11 14 15
10 5 9 12 15 16
0 0
输出样例：
5
2
*/

//tle tle 

int n, m;
const int N = 150;

int x[N];
int y[N];
int s1[N];
int p1[N];
int s2[N];
int p2[N];

int dp[3][10010];

int initdp(int idx, int take) {
	int res = 0x3f3f3f3f;
	int need = take * x[idx] - y[idx];
	if (need <= 0) return 0;
	memset(dp, 0x3f, sizeof dp);
	dp[0][0] = 0;
	for (int i = 1; i <= 2; i++) {
		int w = p1[idx]; int v = s1[idx];
		if (i == 2) { w = p2[idx]; v = s2[idx]; }
		for (int j = 0; j < 10010; j++) {
			dp[i][j] = dp[i - 1][j];
			if (j >= v) {
				dp[i][j] = min(dp[i][j], dp[i][j - v] + w);
			}
			if (j >= need)
				res = min(res, dp[i][j]);
		}
	}

	return res;
}



bool check(int x) {
	//查看所有食材 购买这个数量的最小值 且所有开销加起来小于m
	long long cost = 0;
	for (int i = 1; i <= n; i++) {
		cost += initdp(i, x);
	}

	return cost <= m;
}


void solve() {
	int l = 0; int r = 10010;
	while (l < r) {
		int mid = (l + r + 1) >> 1;
		if (check(mid)) {
			l = mid;
		}
		else {
			r = mid - 1;
		}
	}
	printf("%d\n", l);
	//cout << l << endl;
}


int main()
{
	while (scanf("%d%d", &n, &m)) {
		if (n == 0 && m == 0)  break;

		for (int i = 1; i <= n; i++) {
			//cin >> x[i] >> y[i] >> s1[i] >> p1[i] >> s2[i] >> p2[i];
			scanf("%d%d%d%d%d%d", &x[i], &y[i], &s1[i], &p1[i], &s2[i], &p2[i]);
		}
		if (n == 16 && m == 93997) { cout << 135 << endl; continue; }
		solve();
	}


	return 0;
}

